//+------------------------------------------------------------------+
//|                                             MoneyFixedMargin.mqh |
//|                             Copyright 2000-2025, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#include <Expert/ExpertMoney.h>       // 专家顾问资金管理基类

// wizard description start (向导描述，用于MQL5向导生成代码)
//+------------------------------------------------------------------+
//| 类描述信息                                                       |
//| Title=固定保证金比例交易                                         |
//| Type=Money                                                       |
//| Name=FixMargin                                                   |
//| Class=CMoneyFixedMargin                                          |
//| Page=                                                            |
//| Parameter=Percent,double,10.0,保证金占用百分比                    |
//+------------------------------------------------------------------+
// wizard description end

//+------------------------------------------------------------------+
//| CMoneyFixedMargin 类：固定保证金比例资金管理实现                   |
//| 核心能力：继承自 CExpertMoney，根据账户资金的固定百分比计算开仓手数，  |
//|           确保每笔交易占用的保证金不超过账户资金的预设比例，控制风险   |
//| 适用场景：需要根据账户资金动态调整手数（但保持风险比例固定）的策略，   |
//|           适合追求风险一致性的交易者（如每笔交易最多占用账户10%保证金）|
//+------------------------------------------------------------------+
class CMoneyFixedMargin : public CExpertMoney
  {
public:
   //----------------------------------------------------------------
   // 构造与析构函数
   //----------------------------------------------------------------
   /**
    * @brief 构造函数：初始化固定保证金比例资金管理对象
    * @details 继承父类 CExpertMoney 的初始化逻辑，初始化保证金比例参数
    */
                     CMoneyFixedMargin(void);

   /**
    * @brief 析构函数：清理固定保证金比例资金管理对象
    * @details 释放资源，依赖父类析构逻辑
    */
                    ~CMoneyFixedMargin(void);

   //----------------------------------------------------------------
   // 开仓手数计算：根据固定保证金比例计算多空单手数
   //----------------------------------------------------------------
   /**
    * @brief 计算多单开仓手数（基于固定保证金比例）
    * @param price [in] 开仓价格（若为0则使用当前卖价 m_symbol.Ask()）
    * @param sl [in] 止损价格（未直接使用，父类可能用于风险计算）
    * @return double - 多单最大允许手数（确保保证金占用不超过预设比例）
    * @note 调用账户对象的 MaxLotCheck() 计算符合保证金比例的最大手数
    */
   virtual double    CheckOpenLong(double price,double sl);

   /**
    * @brief 计算空单开仓手数（基于固定保证金比例）
    * @param price [in] 开仓价格（若为0则使用当前买价 m_symbol.Bid()）
    * @param sl [in] 止损价格（未直接使用，父类可能用于风险计算）
    * @return double - 空单最大允许手数（确保保证金占用不超过预设比例）
    * @note 调用账户对象的 MaxLotCheck() 计算符合保证金比例的最大手数
    */
   virtual double    CheckOpenShort(double price,double sl);
  };
//+------------------------------------------------------------------+